home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Converters / jpeg / main.m < prev    next >
Encoding:
Text File  |  1993-01-24  |  2.6 KB  |  117 lines

  1. #import <appkit/NXBitmapImageRep.h>
  2. #import <streams/streams.h>
  3. #import <appkit/tiff.h>
  4.  
  5. #include <stdio.h>
  6. #include <sys/time.h>
  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9.  
  10. extern FILE *GIF_file;
  11. extern unsigned char *r, *g, *b;
  12. extern int GIF_xsize, GIF_ysize;
  13.  
  14. float factor = 120.0;
  15. int verbose = 0;
  16.  
  17. int usec(struct timeval *t)
  18. {
  19.     return t->tv_sec * 1000 * 1000 + t->tv_usec;
  20. }
  21.  
  22. int diff_time(struct timeval *s, struct timeval *e)
  23. {
  24.     return usec(e) - usec(s);
  25. }
  26.  
  27. main(int argc, char *argv[])
  28. {
  29.     int i;
  30.     struct timeval s, e;
  31.     struct stat stat_buf;
  32.     char *fname, *out;
  33.     unsigned char *planes[3];
  34.     id tiff;
  35.     NXStream *file;
  36.  
  37.     for (i = 1; i < argc; i++)
  38.         if (argv[i][0] != '-')
  39.             fname = argv[i];
  40.         else
  41.         switch(argv[i][1]) {
  42.         case 'v':
  43.             verbose = !verbose;
  44.             break;
  45.         case 'f':
  46.             factor = atof(argv[++i]);
  47.             break;
  48.         case 'o':
  49.             out = argv[++i];
  50.             break;
  51.         case 'h':
  52.             fprintf(stderr,"usage: jpeg <gif-file> -o <tiff> "
  53.                 "[-f factor] [-v]\n");
  54.             exit(10);
  55.         }
  56.         
  57.     if (fname == NULL) {
  58.         fprintf(stderr, "Error:  must specify input file.\n");
  59.         exit(10);
  60.     }
  61.     if (out == NULL) {
  62.         fprintf(stderr, "Error:  must specify output file.\n");
  63.         exit(10);
  64.     }
  65.     
  66.     GIF_file = fopen(fname, "rb");
  67.     stat(fname, &stat_buf);
  68.     
  69.     if (verbose)
  70.         printf("Starting size = %d.\n", stat_buf.st_size);
  71.     i = stat_buf.st_size;
  72.     
  73.     gettimeofday(&s, NULL);
  74.     if (readgifheader(stat_buf.st_size) < 0) {
  75.         fprintf(stderr, "Error:  bad header in %s.\n", fname);
  76.         exit(10);
  77.     }
  78.     if (readgif() < 0)
  79.         fprintf(stderr, "Error:  reading file %s... using what was "
  80.         "read.\n", fname);
  81.     gettimeofday(&e, NULL);
  82.     if (verbose)
  83.         printf("Time to read GIF = %d usec.\n", diff_time(&s, &e));
  84.     
  85.     gettimeofday(&s, NULL);
  86.     planes[0] = r;
  87.     planes[1] = g;
  88.     planes[2] = b;
  89.     tiff = [[NXBitmapImageRep alloc] initDataPlanes: planes 
  90.         pixelsWide: (int) GIF_xsize
  91.         pixelsHigh: (int) GIF_ysize bitsPerSample: 8
  92.         samplesPerPixel: 3 hasAlpha: NO isPlanar: YES
  93.         colorSpace: NX_RGBColorSpace bytesPerRow: GIF_xsize
  94.         bitsPerPixel: 8];
  95.     gettimeofday(&e, NULL);
  96.     if (verbose)
  97.         printf("Time to convert = %d usec.\n", diff_time(&s, &e));
  98.  
  99.     gettimeofday(&s, NULL);
  100.     file = NXOpenMemory(NULL, 0, NX_WRITEONLY);
  101.     [tiff writeTIFF: file usingCompression: NX_TIFF_COMPRESSION_JPEG
  102.         andFactor: factor];
  103.     gettimeofday(&e, NULL);
  104.     if (verbose)
  105.         printf("Time to JPEG = %d usec.\n", diff_time(&s, &e));
  106.  
  107.     NXSaveToFile(file, out);
  108.     stat(out, &stat_buf);
  109.     
  110.     if (verbose)
  111.         printf("Ending size = %d.\n", stat_buf.st_size);
  112.     if (verbose)
  113.         printf("Compression = %f%%\n", ((float) stat_buf.st_size) /
  114.             ((float) i) * 100.0);
  115.  
  116. }
  117.